home *** CD-ROM | disk | FTP | other *** search
/ PC Player 2004 May / pc player 2004-05.iso / Demos / FarCry / Data1.cab / _2A46B732F375433FA5437C74E2B45968 < prev    next >
Encoding:
Text File  |  2004-01-06  |  1.8 KB  |  55 lines

  1. // ===============================================================
  2. // Vertex Program: 
  3. // Description: 
  4. // Last Update: 14/08/2003
  5. // Coder: Andrey Honich
  6. // ===============================================================
  7.  
  8.       #include "../CGVPMacro.csi"
  9.  
  10.       VS20Only
  11.  
  12.       VertAttributes { POSITION_3 TEXCOORD0_2 TANG_3X3 }
  13.       MainInput { VIEWPROJ_MATRIX, LIGHT_POS, CAMERA_POS, ATTEN, uniform float4x4 TexMatrix }
  14.       DeclarationsScript
  15.       {
  16.         IN_T0_TANG
  17.         OUT_T0_T1_T2_T3_T4_T5_T6_C0
  18.       }
  19.       PositionScript = PosCommon
  20.       CoreScript
  21.       {
  22.         OUT.Tex0.xy = IN.TexCoord0.xy;
  23.         OUT.Tex1.xy = IN.TexCoord0.xy;
  24.         OUT.Tex5.xy = IN.TexCoord0.xy;
  25.  
  26.         TANG_MATR
  27.  
  28.         float3 lVec = LightPos.xyz - vPos.xyz;
  29.         float3 lightVec = mul(objToTangentSpace, lVec);          
  30.         float3 vDist = PROC_ATTENPIX;
  31.         OUT.Tex2.xyz = lightVec;          
  32.  
  33.         // transform light vector from object space to tangent space and pass it as a tex coords
  34.         OUT.Tex4.xyz = vDist;
  35.         OUT.Color.xyz = vDist;
  36.         
  37.         // store normalized light vector
  38.         float3 vVec = CameraPos.xyz - vPos.xyz;
  39.         float3 viewVec = mul(objToTangentSpace, vVec);
  40.  
  41.         // compute half angle vector
  42.         float3 halfAngleVector = normalize(viewVec) + normalize(lightVec);
  43.  
  44.         // transform light vector from object space to tangent space and pass it as a tex coords
  45.         OUT.Tex3.xyz = halfAngleVector;
  46.  
  47.         float3 tCamVec = normalize(vVec);
  48.         float3 tNormal = IN.TNormal.xyz;
  49.         float3 tRef = dot(tNormal.xyz, tCamVec.xyz) * tNormal.xyz * 2 - tCamVec.xyz;
  50.         float4 tRM;
  51.         tRM.xyz = tRef.xyz;
  52.         tRM.w = vPos.w;
  53.         OUT.Tex6 = mul(tRM, TexMatrix);
  54.       }
  55.